class TreeNode {
    val: any;
    left: TreeNode | null;
    right: TreeNode | null;
    constructor(val: any) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
    setLeft(node: TreeNode): void {
        this.left = node
    }
    setRight(node: TreeNode): void {
        this.right = node
    }
}
// 根节点 --> 左节点--> 右节点
function executPreOrder(root: TreeNode | null): any[] {
    if (!root) {
        return []
    }
    // 获取节点数据
    const res = []
    // 执行遍历：根节点 --> 左节点--> 右节点
    const preOrder =(node: TreeNode | null) =>{
        if(!node){
            return 
        }
        res.push(node.val)
        preOrder(node.left)
        preOrder(node.right)
    }
    preOrder(root)
    return res
}

// 左节点--> 根节点 --> 右节点
function inOrderTraversa(root: TreeNode | null): any[] {
    if (!root) {
        return []
    }
    // 获取节点数据
    const res = []
    // 执行遍历：左节点--> 根节点 --> 右节点
    const inOrder =(node: TreeNode | null) =>{
        if(!node){
            return 
        }
        inOrder(node.left)
        res.push(node.val)
        inOrder(node.right)
    }
    inOrder(root)
    return res
}


// 左节点 --> 右节点--> 根节点
function postOrderTraversal(root: TreeNode | null): any[] {
    if (!root) {
        return []
    }
    // 获取节点数据
    const res = []
    // 执行遍历：左节点--> 根节点 --> 右节点
    const postOrder =(node: TreeNode | null) =>{
        if(!node){
            return 
        }
        postOrder(node.left)
        postOrder(node.right)
        res.push(node.val)
    }
    postOrder(root)
    return res
}

